/**
 * Author : Jorge Mejuto Create : 28/04/2010
 */

package net.eyra.negocio.explotacion.informes.diario;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import net.eyra.negocio.Constantes;
import net.eyra.negocio.dao.ExplotacionDao;
import net.eyra.negocio.dao.EyraDaoException;
import net.eyra.negocio.entidades.explotacion.Tarificador;
import net.eyra.negocio.explotacion.informes.diario.pagina1.Pagina1;
import net.eyra.negocio.explotacion.produccion.Informes;
import net.eyra.utiles.Correo;
import net.eyra.utiles.FicheroException;
import net.eyra.utiles.FormateoFechaException;
import net.eyra.utiles.Path;
import net.eyra.utiles.Periodo;

import org.apache.commons.mail.EmailException;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;

public class InformeDiario {

    private String ficheroPDF = Path.getPathTemp() + "informe.pdf";
    private String ruta = "";

    public static void main(String[] args) throws ParseException {
        new InformeDiario().Test("/home/jorge/Desarrollo/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/eyra_2.5");
    }

    private void Test(String ruta) throws ParseException {
        this.ficheroPDF = ruta + "/temp/informe.pdf";
        this.ruta = ruta;
        GenerarInformeDiario();
    }

    public InformeDiario() throws ParseException {
        GenerarInformeDiario();
    }

    public void GenerarInformeDiario() throws ParseException {
        System.out.println("Iniciando Generación de Informe");
        try {
            Document informe = new Document(PageSize.A3, 5, 5, 5, 5);
            PdfWriter.getInstance(informe, new FileOutputStream(ficheroPDF));

            informe.addAuthor("Delegación de La Coruña");
            informe.addTitle("Informe Diario de Producción");
            informe.addSubject("EYRA");
            informe.open();

            Periodo periodo = new Periodo();
            // periodo.setPeriodoMes(Periodo.ABRIL);
            // periodo.setDatoFecha(Periodo.FECHA_FINAL, Periodo.DIA, 26);
            // periodo.setDatoFecha(Periodo.FECHA_FINAL, Periodo.MES, Periodo.ABRIL);
            // periodo.AjustarPeriodoCurvas(Periodo.MEDIDA_TM1);

            if (periodo.getDatoFecha(Periodo.FECHA_FINAL, Periodo.DIA) == 1)
                periodo.setDatoFecha(Periodo.FECHA_INICIAL, Periodo.MES, periodo.getDatoFecha(Periodo.FECHA_INICIAL, Periodo.MES) - 1);

            periodo.DesdePrimeroMes();
            periodo.setDatoFecha(Periodo.FECHA_FINAL, Periodo.DIA, periodo.getDatoFecha(Periodo.FECHA_FINAL, Periodo.DIA) - 1);
            // periodo.setDatoFecha(Periodo.FECHA_FINAL, Periodo.DIA, 17);

            new Pagina1(informe, periodo);

            informe.close();

            System.out.println("Informe Generado");

            // Preparar fichero con Exportación de Curvas

            Informes informes = new Informes();

            // Path.setPathBase(ruta);
            String nombre_fichero = "CURVAS_CARGA";
            String fichero_zip = Path.getPathTemp() + nombre_fichero + ".zip";

            ExplotacionDao dao = new ExplotacionDao();
            System.out.println("Preparando Curvas de Carga");
            try {
                List<Tarificador> tarificadores = dao.ListaTarificadores(1, true);
                String temp = "";
                for (Tarificador tarificador : tarificadores)
                    temp += String.valueOf(tarificador.getId_tarificador()) + ",";
                temp = temp.substring(0, temp.length() - 1);
                String[] id_tarificadores = temp.split(",");

                informes.ExportarCurvasCarga(null, Path.getPathTemp(), nombre_fichero, id_tarificadores, periodo.getFecha_inicial(),
                                             periodo.getFecha_final(), 0, Constantes.CURVAS_CARGA_TM1, true, true);

            } catch (FormateoFechaException e) {
            } catch (FicheroException e) {
            } catch (EyraDaoException e) {
            }
            System.out.println("Curvas de Carga generadas");
            BufferedReader bf = new BufferedReader(new FileReader(Path.getPathTareas() + "InformeDiario/para.txt"));
            String linea;
            String s_para = "";

            while ((linea = bf.readLine()) != null)
                s_para += linea;

            bf.close();

            StringTokenizer tokens = new StringTokenizer(s_para, ";");
            List<String> para = new ArrayList<String>();
            while (tokens.hasMoreElements())
                para.add(tokens.nextToken());

            bf = new BufferedReader(new FileReader(Path.getPathTareas() + "InformeDiario/asunto.txt"));
            String asunto = bf.readLine();
            bf.close();

            bf = new BufferedReader(new FileReader(Path.getPathTareas() + "InformeDiario/cuerpo.txt"));
            String cuerpo = "";
            while ((linea = bf.readLine()) != null)
                cuerpo += linea;

            bf.close();

            System.out.println("Preparando para enviar");

            Correo correo = new Correo();
            try {
                correo.setAsunto(asunto);
                correo.setCuerpo(cuerpo);

                correo.setPara(para);

                correo.setRutaAdjunto((ficheroPDF + "," + fichero_zip).split(","));

                correo.Enviar();

                System.out.println("Informe Enviado Correctamente");
            } catch (EmailException e) {
                e.printStackTrace();
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
